# coding:utf-8
'''
Created on 2011-4-8
函数装饰器，和Java中的AOP有些类似。是对方法进行增强，在方法执行之前，之后等时间点做一些事。
@author: xi_li
'''

#===========================
# 无参装饰器
#===========================
def before_method(func): # 在目标方法执行之前打印一段文字
    print '在目标方法[%s]之前执行' % func.__name__
    return func

@before_method
def show1(param):
    print '我是show1方法：', param
show1('GaGa') # 相当于show1 = before_method(show1)，show1('GaGa')相当于before_method(show1)('GaGa')

#==================================================
# 有参装饰器，有参装饰器一般是一个多层嵌套函数，第一层函数
# 的参数为装饰器中传入的参数，第二层函数的参数为目标方法
#==================================================
def before_method_param(uname):
    print 'uname is: ', uname
    def enhance(func):
        return func
    return enhance

@before_method_param('atlantis')
def show2(param):
    print param
show2('GaGa') # 相当于show2 = before_method_param('atlantis')(show2)，show2('GaGa')相当于before_method_param('atlantis)(show2)('GaGa')